// // 不同长度的输入、产生固定同长度的输出 MD5 -> 32*4 SHA1 -> 40*4
// // 散列后的密文是不可逆
// // 散列后的结果是唯一的 -> 一般用于签名校验sign的值
// // 哈希碰撞 不同的密文有可能产生相同的结果MD5和SHA1
//
// // MD5
// let CryptoJS = require('./CryptoJS');
// console.log(CryptoJS.MD5('luojinsheng') + '');   // +''的目的是转为字符串输出
// console.log(CryptoJS.MD5('luojinsheng').toString(CryptoJS.enc.Base64));
// // 实际上和下面相等
// let hexMD5 = CryptoJS.MD5('luojinsheng') + '';
// let rawhex = CryptoJS.enc.Hex.parse(hexMD5)
// console.log(CryptoJS.enc.Base64.stringify(rawhex))
//
// // 没有输入也能做哈希值
// console.log(CryptoJS.MD5() + '')
//
// // SHA
// let CryptoJS = require('./CryptoJS');
// let wordArray = CryptoJS.enc.Utf8.parse('luojinsheng')
// console.log(CryptoJS.SHA1(wordArray) + '');
// console.log(CryptoJS.SHA256('luojinsheng') + '');
// console.log(CryptoJS.SHA512('luojinsheng') + '');
// console.log(CryptoJS.SHA224('luojinsheng') + '');
// console.log(CryptoJS.SHA384('luojinsheng') + '');


// let CryptoJS = require('./CryptoJS');
// console.log(CryptoJS.MD5('luojinsheng')+'');
//
// let  SHA1 = CryptoJS.algo.SHA1.create();
// SHA1.update('luojinsheng');
// let md5_result = SHA1.finalize()+'';
// console.log(md5_result);


// HMAC算法 区别是多了一个密钥
let CryptoJS = require('./CryptoJS');
console.log(CryptoJS.HmacMD5('luojinsheng','key')+'');  // 前面的参数是要加密的值 后面是密钥 可以自己给
console.log(CryptoJS.HmacSHA1('luojinsheng','key')+'');


// SM3 国密算法  对应的环境是sm3-1.0.js 在这里运行才行
var dataBy = Hex.utf8StrToBytes('luojinsheng');  //这一步是先将输入数据转成utf-8编码的字节流，然后再转成16进制可见字符
var sm3 = new SM3Digest();
sm3.update(dataBy,0,dataBy.length);	//数据很多的话，可以分多次update
var sm3Hash = sm3.doFinal();	//得到的数据是个byte数组
var sm3HashHex = Hex.encode(sm3Hash,0,sm3Hash.length);	//编码成16进制可见字符
console.log(sm3HashHex);